/**
 *
 */
package com.hczt.xhminiapp.common.bean;

import lombok.Data;
import lombok.Getter;

/**
 * <p>Description: 请求返回结果</p>
 *
 * @author Dirk
 * @date 2017年5月22日 上午10:18:15
 */
@Getter
public class RtnResult<T> {

    /**
     * 操作代码
     */
    private int code;

    /**
     * 提示信息
     */
    private String message = "操作成功";

    /**
     * 返回数据
     */
    private T data;

    public RtnResult() {
        super();
    }

    public RtnResult(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public RtnResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 操作成功构造方法
     * @param data 待返回的数据
     */
    public RtnResult(T data) {
        this.code = 0;
        this.message = "操作成功";
        this.data = data;
    }

    /**
     * 构造方法
     * @param cm 待返回的操作码及操作提示
     */
    private RtnResult(CodeMsg cm) {
        if (cm == null) {
            return;
        }
        this.code = cm.getCode();
        this.message = cm.getMessage();
        if(cm.getData() != null){
            this.data = (T)cm.getData();
        }
    }

    public static RtnResult success() {
        return new RtnResult<>(null);
    }

    /**
     * 成功时调用
     * @param data 返回数据
     * @return 封装的结果集
     */
    public static <T> RtnResult<T> success(T data) {
        return new RtnResult<>(data);
    }

    /**
     * 失败时调用
     * @param cm 待返回的操作码及操作提示
     * @return
     */
    public static <T> RtnResult<T> error(CodeMsg cm) {
        return new RtnResult<T>(cm);
    }

    public static <T> RtnResult<T> errorWithData(CodeMsg cm) {
        return new RtnResult<T>(cm);
    }

}